package learn.up.java1.quartz;

import java.util.Date;

import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class ScheduledHelle {
	
	public static void main(String[] args) throws InterruptedException {
		// 创建一个JobDetail实例，将该实例与JobHello.class绑定
		JobDetail jd = JobBuilder.newJob(JobHello.class)
				.usingJobData("times", 12)
				.withIdentity("myfirstjob", "job1").build();

		Date d = new Date();
		System.out.println("curentTime  "+d);
//		获取当前时间3秒后的时间为启动时间	 	
		d.setTime(d.getTime()+3000);
		Date endate = new Date();//设置当前时间6秒后为结束时间
		endate.setTime(endate.getTime()+6000);
//		创建一个trigger实例，由这个trigger触发job执行，什么时候执行，执行几次，多久执行一次。。。
//		定义该Job立即执行，每隔两秒重复一次
/*		SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("my trigger", "Trigger1")
				.startAt(d)
				.endAt(endate)
				.usingJobData("info", "trigger1")
				.usingJobData("value",1.2d).usingJobData("times",13)
				.withSchedule(SimpleScheduleBuilder
						.simpleSchedule().withIntervalInSeconds(2)//每个2秒执行
//						执行3次
						.withRepeatCount(3)).build();*/
		
//		使用CronTrigger()
		CronTrigger cron = TriggerBuilder.newTrigger()
				.startNow()
				.withIdentity("john", "group1")
				.usingJobData("info", "trigger1")
				//每秒执行一次,cron表达式
//				LW:每月最后一个工作日
				.withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ? *"))
				//2017年的每天10:15:0触发
//				.withSchedule(CronScheduleBuilder.cronSchedule("59 26 0 ? * * 2017"))
			//每天14点整-14:59:55秒,18点整-18:59:55,每5秒执行一次
//			.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * 14,16 ? * *"))
				.build();
		//每月周一-周五的10:15  "0 15 10 ? * MON-FRI"  英文不区分大小写
		//每月最后一天10:15触发一次  "0 15 10 L * ?"
		//每月第三个周五 10:15触发一次   "0 15 10 ? * 6#3"

		SchedulerFactory sf = new StdSchedulerFactory();
		try {
			Scheduler sch = sf.getScheduler();
			//start()  启动任务
			sch.start();
			//scheduleJob()返回最近一次执行的时间
			Date scheduleJob = sch.scheduleJob(jd, cron);
			System.out.println(scheduleJob);
			Thread.sleep(3000);
			//让任务执行3秒之后暂时挂起  standby()
			sch.standby();
			Thread.sleep(3000);
			//任务挂起3秒之后重启
			sch.start();
		/*
		 * shutdown(boolean)  关闭任务，不能再重启,
		 * boolean=true,等所有任务执行完成才关闭，
		 * boolea=false,不等待任务执行完成，直接关闭
		 */
			sch.shutdown();
		} catch (SchedulerException e) {
			e.printStackTrace();
		}
	}

}
